<?php

/**
 * //////////////////////////////////////////////////////////////////////////////
 * found at: http://www.guzaba.org/page/71/fl/75/rw/Reflection/index.html
 */
class test_controller{
	public function test_action($param1, $param2) {
		//custom logic of the controller...
	}
}

class executor{
	public function exec($controller,$action) {
		$controller_instance = new $controller();
		$method = new ReflectionMethod($controller_instance,$action);
		//$method = new ReflectionMethod($controller,$action);//is also valid
		$parameters = $method->getParameters();
		$arguments = array();
		foreach ($parameters as $parameter) { //the parameters are listed as in the methods signature
			$name = $parameter->getName();//$parameter is object of class ReflectionParameter
			if (isset($_REQUEST[$name])) {
				$arguments[] = $_REQUEST[$name];
			} elseif ($parameter->isDefaultValueAvailable()) {
				$arguments[] = $parameter->getDefaultValue();
			} else {
				$arguments[] = null;
			}
		}
		$method->invokeArgs($controller_instance,$arguments);
		//call_user_func_array(array($controller_instance,$action),$arguments);//the same
	}
}
$executor = new executor();
$executor->exec('test_controller','test_action');

/**
 * //////////////////////////////////////////////////////////////////////////////
 */



/**
 * //////////////////////////////////////////////////////////////////////////////
 */



/**
 * //////////////////////////////////////////////////////////////////////////////
 */




/**
 * //////////////////////////////////////////////////////////////////////////////
 */




/**
 * //////////////////////////////////////////////////////////////////////////////
 */



/**
 * //////////////////////////////////////////////////////////////////////////////
 */

























?>
